package com.fl.nj.mapper;

import com.fl.nj.entity.ServerService;
import org.apache.ibatis.annotations.*;
import java.util.List;
import java.util.Map;

/**
 * 服务Mapper接口
 * 提供服务的数据库操作方法
 */
@Mapper
public interface ServerServiceMapper {
    /**
     * 保存服务信息
     * @param serverService 服务实体
     * @return 影响的行数
     */
    @Insert("INSERT INTO server_service (service_name, service_type_id, device_id, status, description, create_time, update_time) VALUES (#{serviceName}, #{serviceTypeId}, #{deviceId}, #{status}, #{description}, NOW(), NOW())")
    @Options(useGeneratedKeys = true, keyProperty = "id")
    int save(ServerService serverService);
    
    /**
     * 更新服务信息
     * @param serverService 服务实体
     * @return 影响的行数
     */
    @Update("UPDATE server_service SET service_name = #{serviceName}, service_type_id = #{serviceTypeId}, device_id = #{deviceId}, status = #{status}, description = #{description}, update_time = NOW() WHERE id = #{id}")
    int update(ServerService serverService);
    
    /**
     * 根据ID删除服务
     * @param id 服务ID
     * @return 影响的行数
     */
    @Delete("DELETE FROM server_service WHERE id = #{id}")
    int delete(Long id);
    
    /**
     * 根据ID获取服务信息
     * @param id 服务ID
     * @return 服务实体
     */
    @Select("SELECT * FROM server_service WHERE id = #{id}")
    ServerService getById(Long id);
    
    /**
     * 根据服务名称和设备ID获取服务信息
     * @param serviceName 服务名称
     * @param deviceId 设备ID
     * @return 服务实体
     */
    @Select("SELECT * FROM server_service WHERE service_name = #{serviceName} AND device_id = #{deviceId}")
    ServerService getByServiceNameAndDeviceId(@Param("serviceName") String serviceName, @Param("deviceId") Long deviceId);
    
    /**
     * 根据设备ID获取服务列表
     * @param deviceId 设备ID
     * @return 服务列表
     */
    @Select("SELECT * FROM server_service WHERE device_id = #{deviceId} ORDER BY create_time DESC")
    List<ServerService> getByDeviceId(Long deviceId);
    
    /**
     * 获取所有服务信息（包含服务类型和设备名称）
     * @return 服务列表
     */
    List<ServerService> getAllWithDetails();
    
    /**
     * 分页查询服务信息（包含服务类型和设备名称）
     * @param params 包含分页参数和查询条件的Map
     * @return 服务列表
     */
    List<ServerService> getPageListWithDetails(Map<String, Object> params);
    
    /**
     * 获取服务总数
     * @param params 包含查询条件的Map
     * @return 服务总数
     */
    int getTotal(Map<String, Object> params);
}